//package cn.com.scfhdt.payment.configuration;
//
//import org.springframework.amqp.core.Binding;
//import org.springframework.amqp.core.BindingBuilder;
//import org.springframework.amqp.core.Message;
//import org.springframework.amqp.core.Queue;
//import org.springframework.amqp.core.TopicExchange;
//import org.springframework.amqp.rabbit.connection.CachingConnectionFactory;
//import org.springframework.amqp.rabbit.core.RabbitTemplate;
//import org.springframework.amqp.rabbit.support.CorrelationData;
//import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
//import org.springframework.amqp.support.converter.MessageConverter;
//import org.springframework.context.annotation.Bean;
//import org.springframework.context.annotation.Configuration;
//
//import cn.com.yusys.yusp.commons.util.StringUtil;
//import lombok.extern.slf4j.Slf4j;
//
///**
// * @description rabbitmq消息队列用的配置类
// * @author hanjl
// * @date 2019年9月26日
// * @version 1.0.0
// * @Copyright (c) scfhdt
// */
//@Configuration
//@Slf4j
//public class RabbitMQConfig {
//	public static final String SCJKPRODUCT = "scjk-product";
//
//	/**
//	 * @description 申明队列
//	 * @author hanjl
//	 * @date 2019年9月26日
//	 * @param
//	 * @return Queue
//	 */
//	@Bean
//	public Queue queueScjkProduct() {
//		log.info("queueScjkProduct created...");
//		return new Queue(SCJKPRODUCT, true, true, true);
//	}
//
//	/**
//	 * @description 申明交换器
//	 * @author hanjl
//	 * @date 2019年9月26日
//	 * @param
//	 * @return TopicExchange
//	 */
//	@Bean(name = SCJKPRODUCT)
//	public TopicExchange directScjkProduct() {
//		log.info("directScjkProduct created...");
//		return new TopicExchange(SCJKPRODUCT, true, false, null);
//	}
//
//	/**
//	 * @description 通过关键字绑定交换器和队列
//	 * @author hanjl
//	 * @date 2019年9月26日
//	 * @param
//	 * @return Binding
//	 */
//	@Bean
//	public Binding bindScjkProduct() {
//		log.info("bindScjkProduct created...");
//		return BindingBuilder.bind(queueScjkProduct()).to(directScjkProduct()).with(SCJKPRODUCT);
//	}
//
//	/**
//	 * @description 申明消息转换对象
//	 * @author hanjl
//	 * @date 2019年9月26日
//	 * @param
//	 * @return MessageConverter
//	 */
//	@Bean
//	public MessageConverter messageConverter() {
//		log.info("MessageConverter created...");
//		return new Jackson2JsonMessageConverter();
//	}
//
//	/**
//	 * @description 消息确认监听器
//	 * @author hanjl
//	 * @date 2019年9月27日
//	 * @param
//	 * @return MessageConverter
//	 */
//	@Bean
//	public RabbitTemplate.ConfirmCallback confirmCallback() {
//		return new RabbitTemplate.ConfirmCallback() {
//
//			@Override
//			public void confirm(CorrelationData correlationData, boolean ack, String cause) {
//				String msg = "回调id:" + correlationData.getId() + ",";
//				if (ack) {
//					log.info(msg + "消息发送成功");
//				} else {
//					log.info(msg + "消息发送失败:" + cause);
//				}
//			}
//		};
//	}
//
//	/**
//	 * @description 消息发送失败返回监听器
//	 * @author hanjl
//	 * @date 2019年9月27日
//	 * @param
//	 * @return MessageConverter
//	 */
//	@Bean
//	public RabbitTemplate.ReturnCallback returnCallback() {
//		return new RabbitTemplate.ReturnCallback() {
//
//			@Override
//			public void returnedMessage(Message message, int replyCode, String replyText, String exchange,
//					String routingKey) {
//				String msg = "null";
//				if (null != message) {
//					msg = StringUtil.byte2String(message.getBody());
//				}
//				log.error("消息发送失败, routingKey:{},message：{}", routingKey, msg);
//			}
//		};
//	}
//
//	/**
//	 * @description 申明模板对象
//	 * @author hanjl
//	 * @date 2019年9月27日
//	 * @param
//	 * @return RabbitTemplate
//	 */
//	@Bean
//	public RabbitTemplate rabbitTemplate(CachingConnectionFactory factory, MessageConverter messageConverter) {
//		log.info("RabbitTemplate created...,caching factory: {}", factory.getChannelCacheSize());
//		RabbitTemplate rabbitTemplate = new RabbitTemplate(factory);
//		rabbitTemplate.setConfirmCallback(confirmCallback());
//		rabbitTemplate.setReturnCallback(returnCallback());
//		rabbitTemplate.setMessageConverter(messageConverter);
//		rabbitTemplate.setMandatory(true);
//		rabbitTemplate.setUsePublisherConnection(true);
//
//		return rabbitTemplate;
//	}
//}
